/**
 * 
 */
package es.uma.scgt.dao.impl;

import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import es.uma.scgt.dao.EquipoDao;
import es.uma.scgt.modelo.Equipo;
import es.uma.scgt.modelo.FaseP;

/**
 * @author Vaio
 *
 */

@Repository
public class EquipoDaoJpa implements EquipoDao {

	@Autowired
	private SessionFactory session;
	
	/* (non-Javadoc)
	 * @see es.uma.scgt.dao.EquipoDao#listaEquipo()
	 */
	@SuppressWarnings("unchecked")
	public List<Equipo> listaEquipo() {
		return session.getCurrentSession().createQuery("from Equipo").list();
	}

	/* (non-Javadoc)
	 * @see es.uma.scgt.dao.EquipoDao#getEquipoPorId(java.lang.String)
	 */
	public Equipo getEquipoPorId(String equipo) {
		return (Equipo) session.getCurrentSession().createQuery("from Equipo e where e.id = :id").setParameter("id", equipo).uniqueResult();
	}
	
	@SuppressWarnings("unchecked")
	public List<Equipo> getTodosEquipo(){
		return session.getCurrentSession().createQuery("from Equipo e where e.active = 1").list();
		
	}

	public Equipo getEquipoPorId(Integer equipoId) {
		
		return (Equipo) session.getCurrentSession().get(Equipo.class,equipoId);
				
	}

	public Equipo crearEditarEquipo(Equipo equipo) {
		session.getCurrentSession().saveOrUpdate(equipo);
		return equipo;
		
	}

	public void borrarEquipo(Integer equipoId) {
		Equipo equipo = getEquipoPorId(equipoId);
		equipo.setActive(0);
		session.getCurrentSession().saveOrUpdate(equipo);
		
		//session.getCurrentSession().delete(equipo);
		
	}
	
	@SuppressWarnings("unchecked")

	public List<Integer> usuariosXEquipo (List<Integer> equipoIds){
		Query query = session.getCurrentSession().createSQLQuery(
				"select distinct usuarioId from usuario_equipo ue where ue.equipoId in (:equipoIds)").setParameterList("equipoIds", equipoIds);
		
		List<Integer> response = query.list();
		return response;
	}

	@SuppressWarnings("unchecked")
	public Boolean hayUsuarioYN (Integer equipoId) {
		
		Boolean YN = true;
		
		List<Integer> response = new ArrayList<Integer>();
		try{
			Query query = session.getCurrentSession().createQuery(	
					"select distinct id from Usuario ue where ue.equipo.id = :equipoId and ue.active = 1").setParameter("equipoId", equipoId);
			
			response = query.list();
		}catch(Exception e ){
			e.printStackTrace();
		}
		if (response == null || response.size() ==0){
			YN = false;
			//Se puede borrar
		}
		return YN;
	}
}
